package com.tyning.leetcode.jzII001;

//给定两个整数 a 和 b ，求它们的除法的商 a/b ，要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%' 。
//
// 
//
//注意：
//
//整数除法的结果应当截去（truncate）其小数部分，例如：truncate(8.345) = 8 以及 truncate(-2.7335) = -2
//假设我们的环境只能存储 32 位有符号整数，其数值范围是 [−231, 231−1]。本题中，如果除法结果溢出，则返回 231 − 1
// 
//
//示例 1：
//
//输入：a = 15, b = 2
//输出：7
//解释：15/2 = truncate(7.5) = 7
//示例 2：
//
//输入：a = 7, b = -3
//输出：-2
//解释：7/-3 = truncate(-2.33333..) = -2
//示例 3：
//
//输入：a = 0, b = 1
//输出：0
//示例 4：
//
//输入：a = 1, b = 1
//输出：1
// 
//
//提示:
//
//-231 <= a, b <= 231 - 1
//b != 0
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/xoh6Oh
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
// 注意：本题与主站 29 题相同：https://leetcode-cn.com/problems/divide-two-integers/


import java.util.HashSet;

public class Solution {
    /**
     * 这个方法执行超时
     *
     * @param nums
     * @return
     */
    public static int findRepeatNumber(int[] nums) {
        if (nums == null || nums.length < 1) {
            return -1;
        }
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] == nums[j]) {
                    return nums[i];
                }
            }
        }
        return -1;
    }

    /**
     * 使用的是现在hashset 如果插入成功的话就是没有如果插入失败就是重复
     *
     * @param nums
     * @return
     */
    public static int findRepeatNumber1(int[] nums) {
        if (nums == null || nums.length < 1) {
            return -1;
        }
        HashSet set = new HashSet(nums.length);
        for (int a : nums) {
            if(!set.add(a)){
                return a;
            }
        }
        return -1;
    }
    /**
     * 利用条件  数组中的元素一定时0到n-1的数字 所以就是0到n-1的一个乱序
     * 那么就将下标和数字放在同样的位置
     *
     * @param nums
     * @return
     */
    public static int findRepeatNumber2(int[] nums) {
        int i = 0;
        while (i < nums.length) {
            if (nums[i] == i) {
                i++;
                continue;
            }
            if (nums[nums[i]] == nums[i]){
                return nums[i];
            }
            int tmp = nums[i];
            nums[i] = nums[tmp];
            nums[tmp] = tmp;
        }
        return -1;
    }



    public static void main(String[] args) {
//        int[] nums = {2, 3, 1, 0, 2, 5, 3};
//        System.out.println(findRepeatNumber(nums));

        System.out.println(Math.abs(-Integer.MIN_VALUE-1));
    }
}
